const state = {
  userInfo: null,
  token: null,
  role: 'user'
}

const mutations = {
  SET_USER_INFO(state, userInfo) {
    state.userInfo = userInfo
    localStorage.setItem('userInfo', JSON.stringify(userInfo))
  },
  SET_TOKEN(state, token) {
    state.token = token
    localStorage.setItem('token', token)
  },
  SET_ROLE(state, role) {
    state.role = role
    localStorage.setItem('userRole', role)
  },
  CLEAR_USER(state) {
    state.userInfo = null
    state.token = null
    state.role = 'user'
    localStorage.removeItem('userInfo')
    localStorage.removeItem('token')
    localStorage.removeItem('userRole')
    localStorage.removeItem('isLoggedIn')
  }
}

const actions = {
  // 登录
  login({ commit }, { username, password }) {
    return new Promise((resolve, reject) => {
      // 模拟登录验证
      if (username === 'admin' && password === '123456') {
        // 模拟从API获取的用户信息，这里假设包含所有字段
        const fetchedUserInfo = {
          username: username,
          nickname: '管理员',
          email: 'admin@example.com', // 模拟邮箱
          avatar: '', // 模拟头像
          realName: '管理员本人', // 模拟真实姓名
          phone: '12345678900', // 模拟手机号码
          position: '系统管理员', // 模拟职位
          bio: '负责系统管理' // 模拟个人简介
        };

        const token = 'mock-token-' + Date.now();
        const role = 'admin';

        // 检查 localStorage 中是否存在之前的 userInfo
        const savedUserInfo = localStorage.getItem('userInfo');
        let finalUserInfo = fetchedUserInfo;

        if (savedUserInfo) {
          try {
            const parsedUserInfo = JSON.parse(savedUserInfo);
            // 合并从 localStorage 读取的信息，优先保留 localStorage 中的字段（例如用户在个人中心修改过的）
            finalUserInfo = { ...fetchedUserInfo, ...parsedUserInfo };
          } catch (e) {
            console.error('Failed to parse userInfo from localStorage', e);
            // 如果解析失败，就使用 fetchedUserInfo
            finalUserInfo = fetchedUserInfo;
          }
        }

        commit('SET_USER_INFO', finalUserInfo);
        commit('SET_TOKEN', token);
        commit('SET_ROLE', role);
        localStorage.setItem('isLoggedIn', 'true');

        // 管理员登录后直接跳转到管理员个人中心
        // 使用 nextTick 确保在路由跳转前 commit 完成
        this.router.push('/admin/profile');
        resolve(true);
      } else {
        reject(new Error('用户名或密码错误'));
      }
    });
  },

  // 登出
  logout({ commit }) {
    commit('CLEAR_USER')
  },

  // 更新用户信息
  updateUserInfo({ commit }, userInfo) {
    commit('SET_USER_INFO', userInfo)
  }
}

const getters = {
  isLoggedIn: state => !!state.token,
  userInfo: state => state.userInfo,
  userRole: state => state.role
}

export default {
  namespaced: true,
  state,
  mutations,
  actions,
  getters
} 